package fr.eisti.icc.data;

import javax.persistence.*;
import java.io.Serializable;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author clion
 */
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@Table(name="EMPRUNTEUR")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
public  class  Emprunteur implements Serializable  {

    @Column(name="nom")
    private String nom;
    @Column(name="prenom")
    private String prenom;
    @Id
    @Column(name="login")
    private String login;
    @Column(name="numCarte")
    private String numCarte;
    @Column(name="adresse")
    private String adresse;
    @Column(name="tel")
    private String tel;
    @Column(name="dateNaissance")
    private String dateNaissance;
    @Column(name="estBlackListe")
    private boolean estBlackListe;
    @Column(name="estAdmin")
    private boolean estAdmin;
    @Column(name="promo")
    private String Promo;
    @Column(name="estProf")
    private boolean estProf;
    //Liste des emprunts d'un utilisateur
    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)  
    @LazyCollection(LazyCollectionOption.FALSE)
    private List<Emprunt> emprunts;
    @Column(name = "dureeMaxEmprunt")
    private int dureeMaxEmprunt;

    
    /////////////////////////////CONSTRUCTEURS////////////////////////////
    
    
    public Emprunteur(){
 
    }

    public Emprunteur(String nom, String prenom, String login, String numCarte, String adresse, String tel, String dateNaissance, boolean estProf) {
        
        this.nom = nom;
        this.prenom = prenom;
        this.login = login;
        this.numCarte = numCarte;
        this.adresse = adresse;
        this.tel = tel;
        this.dateNaissance = dateNaissance;
        this.estBlackListe = false;
        this.estProf = estProf;
        if (estProf){
            this.dureeMaxEmprunt = 150;
        } else {
            this.dureeMaxEmprunt = 15;
        }
        this.estAdmin = false;
        
    }
    
    public Emprunteur(String nom, String prenom, String login, String numCarte, String adresse, String tel, String dateNaissance, boolean estProf, String promo) {
        
        this.nom = nom;
        this.prenom = prenom;
        this.login = login;
        this.numCarte = numCarte;
        this.adresse = adresse;
        this.tel = tel;
        this.dateNaissance = dateNaissance;
        this.estBlackListe = false;
        if (estProf){
            this.dureeMaxEmprunt = 150;
        } else {
            this.dureeMaxEmprunt = 15;
        }
        this.estProf = estProf;
        this.Promo = promo;
        this.estAdmin = false;
    }

    
    /////////////////////////GETTERS/SETTERS/////////////////////////////
    
    
    public boolean isEstAdmin() {
        return estAdmin;
    }

    public void setEstAdmin(boolean estAdmin) {
        this.estAdmin = estAdmin;
    }
    
    
    public String getNom() {
        return nom;
    }

    public String getPrenom() {
        return prenom;
    }
    
    public String getLogin() {
        return login;
    }

    public int getDureeMaxEmprunt() {
        return dureeMaxEmprunt;
    }

    public void setDureeMaxEmprunt(int dureeMaxEmprunt) {
        this.dureeMaxEmprunt = dureeMaxEmprunt;
    }

    public String getNumCarte() {
        return numCarte;
    }

    public String getAdresse() {
        return adresse;
    }

    public String getTel() {
        return tel;
    }

    public String getDateNaissance() {
        return dateNaissance;
    }

    public boolean getEstBlackListe() {
        return estBlackListe;
    }

    public void setEstBlackListe(boolean estBlackListe) {
        this.estBlackListe = estBlackListe;
    }

    @XmlTransient
    public List<Emprunt> getEmprunts() {
        return emprunts;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public void setPrenom(String prenom) {
        this.prenom = prenom;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public void setNumCarte(String numCarte) {
        this.numCarte = numCarte;
    }

    public void setAdresse(String adresse) {
        this.adresse = adresse;
    }

    public void setTel(String tel) {
        this.tel = tel;
    }



    public void setDateNaissance(String dateNaissance) {
        this.dateNaissance = dateNaissance;
    }
   
    public void setEmprunts(List<Emprunt> emprunts) {
        this.emprunts = emprunts;
    }

    public boolean addEmprunt(Emprunt emp){

        return  emprunts.add(emp);
    }
    public boolean removeEmprunt(Document doc){
        for (int i = 0; i < emprunts.size(); i++) {
            if(emprunts.get(i).getDocument().getId() == doc.getId()){
                return  emprunts.remove(emprunts.get(i));
            }
        }
        return  false;
    }
    
    public boolean peutEmprunter(){
        return  emprunts.size()<5 && !estBlackListe;
    }

    public String getPromo() {
        return Promo;
    }

    public void setPromo(String Promo) {
        this.Promo = Promo;
    }

    public boolean isEstProf() {
        return (estProf || estAdmin);
    }

    public void setEstProf(boolean estProf) {
        this.estProf = estProf;
    }

    @Override
    public String toString() {
        return "Emprunteur{nom=" + nom + ", prenom=" + prenom + ", login=" + login + ", numCarte=" + numCarte + ", adresse=" + adresse + ", tel=" + tel + ", dateNaissance=" + dateNaissance + ", estBlackListe=" + estBlackListe + ", emprunts=" + emprunts + '}';
    }
    
}
